package integracion.converters;

import integracion.converters.entidades.Articulo;

import java.text.ParseException;
import java.text.SimpleDateFormat;

import org.apache.log4j.Logger;

import portal.vo.ProductoElectroDomesticoVO;
import portal.vo.ProductoInfantilVO;
import portal.vo.ProductoModaVO;
import portal.vo.ProductoMuebleVO;
import portal.vo.ProductoVO;

import com.thoughtworks.xstream.XStream;

public class NuevoProductoXmlConverter extends
		AbstractXmlConverter<ProductoVO> {

	Logger logger = Logger.getLogger(NuevoProductoXmlConverter.class);
	
	SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	

	@Override
	public ProductoVO getVO(String xml)
			throws ErrorEnXmlException {
		
		XStream xs = super.getXStreamArticulo();
		

		try {
			Articulo articulo = (Articulo) xs.fromXML(xml);
			String categoria = articulo.getTipo();
			//System.out.println("***Categoria: " + categoria);
			ProductoVO producto = null;
			
			if("Electrodomestico".equalsIgnoreCase(categoria)) {
				
				producto = (ProductoElectroDomesticoVO)completarProductoElectrodomestico(articulo);
			} else if("Moda".equalsIgnoreCase(categoria)) {
				
				producto = (ProductoModaVO)completarProductoModa(articulo);
			} else if("Mueble".equalsIgnoreCase(categoria)) {
				
				producto = (ProductoMuebleVO)completarProductoMueble(articulo);
			} else if("Infantil".equalsIgnoreCase(categoria)) {
				
				producto = (ProductoInfantilVO)completarProductoInfantil(articulo);
			}
			
			return producto;
		} catch (Exception e) {
			throw new ErrorEnXmlException(e.getMessage());
		}
	}
	
	protected ProductoVO completarProductoElectrodomestico(Articulo articulo){
		ProductoElectroDomesticoVO producto = new ProductoElectroDomesticoVO();
		producto.setCodigo(new Long(articulo.getCodigo()));
		producto.setNombre(articulo.getNombre());
		producto.setDescripcion(articulo.getDescripcion());
		producto.setMarca(articulo.getMarca());
		producto.setImagen(articulo.getFotoURL());
		producto.setPrecio(new Double(articulo.getPrecio()));
		producto.setPaisOrigen(articulo.getOrigen());
		try {
			producto.setFecha(format.parse(articulo.getFecha()));
		} catch (ParseException e) {
			logger.warn("Error al parsear la fecha del producto.");
		}
		producto.setRanking(0); // inicializo el nuevo producto con cero
		
		producto.setFichaTecnica(articulo.getFichaTecnica());
		return producto;
	}
	
	protected ProductoVO completarProductoModa(Articulo articulo){
		ProductoModaVO producto = new ProductoModaVO();
		producto.setCodigo(new Long(articulo.getCodigo()));
		producto.setNombre(articulo.getNombre());
		producto.setDescripcion(articulo.getDescripcion());
		producto.setMarca(articulo.getMarca());
		producto.setImagen(articulo.getFotoURL());
		producto.setPrecio(new Double(articulo.getPrecio()));
		producto.setPaisOrigen(articulo.getOrigen());
		try {
			producto.setFecha(format.parse(articulo.getFecha()));
		} catch (ParseException e) {
			logger.warn("Error al parsear la fecha del producto.");
		}
		producto.setRanking(0); // inicializo el nuevo producto con cero
		
		producto.setColor(articulo.getColor());
		producto.setTalle(articulo.getTalle());
		return producto;
	}
	
	protected ProductoVO completarProductoMueble(Articulo articulo){
		ProductoMuebleVO producto = new ProductoMuebleVO();
		producto.setCodigo(new Long(articulo.getCodigo()));
		producto.setNombre(articulo.getNombre());
		producto.setDescripcion(articulo.getDescripcion());
		producto.setMarca(articulo.getMarca());
		producto.setImagen(articulo.getFotoURL());
		producto.setPrecio(new Double(articulo.getPrecio()));
		producto.setPaisOrigen(articulo.getOrigen());
		try {
			producto.setFecha(format.parse(articulo.getFecha()));
		} catch (ParseException e) {
			logger.warn("Error al parsear la fecha del producto.");
		}
		producto.setRanking(0); // inicializo el nuevo producto con cero
		
		producto.setMaterial(articulo.getMaterial());
		return producto;
	}
	
	protected ProductoVO completarProductoInfantil(Articulo articulo){
		ProductoInfantilVO producto = new ProductoInfantilVO();
		producto.setCodigo(new Long(articulo.getCodigo()));
		producto.setNombre(articulo.getNombre());
		producto.setDescripcion(articulo.getDescripcion());
		producto.setMarca(articulo.getMarca());
		producto.setImagen(articulo.getFotoURL());
		producto.setPrecio(new Double(articulo.getPrecio()));
		producto.setPaisOrigen(articulo.getOrigen());
		try {
			producto.setFecha(format.parse(articulo.getFecha()));
		} catch (ParseException e) {
			logger.warn("Error al parsear la fecha del producto.");
		}
		producto.setRanking(0); // inicializo el nuevo producto con cero
		
		producto.setEdadRecomendada(new Integer(articulo.getEdadRecomendada()));
		return producto;
	}
}
